Skip to content

fix(platform-objects): enabling two-factor and copying an invitation link are human-only identity actions - #28386

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-nsguxo
Oct 31, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-nsguxo

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Sam · project thread
Fixes #28368

Clause-②: no
Metadata-protocol: none

domain:server#4 · os-zhuang · os-dev for claim 6541181717 · Ruling-ref: 6540309323 (#27900, 「其他同意」)
Tier: H (docs/adr/0011-actions-as-ai-tools.md): a contract review, then an authorised approval by a GOVERNED_APPROVER, before the queue.

维护者速读

  • 改了什么:两个 enable_two_factor 动作(sys_user 与 sys_two_factor)删掉 ai 块,从 E 档移到 H 档;sys_invitation.copy_invitation_link 评为 H 档,保持不写 ai 块。ADR-0011 附记更新三档名单(H23 / C17 / E19,共 36 个 ai 块、59 个动作),并加一行:sys_approval_request 的 9 个动作未评估,评估前一律仅限人工。
  • 为什么改:执行您在 [Decision] sys_* kernel objects, assessed as one set: which of the 58 platform identity actions may an agent ever reach (plain declaration / declaration + confirmation / human-only), executing #27681 B parameter 2 in one ruling #27900 上的裁决「其他同意」。启用双因素要用户密码、返回新的登录因子;邀请链接本身就是凭据。两者都不该让 agent 拿到。
  • 风险与回滚:只收窄 agent 能看到的动作,Console 里登录用户的操作不变。回滚即还原这一个提交。
  • 先看:docs/adr/0011-actions-as-ai-tools.md 的修订注记与名单;packages/platform-objects/src/identity/sys-user.object.ts 的 enable_two_factor。
  • 两分钟验证:grep -c "ai: {" packages/platform-objects/src/identity/*.object.ts 合计应为 36,且 enable_two_factor 下不再有 ai:。
  • 需要你做的:本 PR 触及 ADR(Tier H),合同复审通过后需 os-zhuang 或 hotlong 批准。

What changes

  • sys_user.enable_two_factor, sys_two_factor.enable_two_factor (E → H). Each drops its ai: { exposed: true, description } block; a one-line comment names bucket H in its place. Over MCP neither is listed any more, and run_action refuses both by name (the existing per-action opt-in, systemObjectActionExposureError). A signed-in person runs both exactly as before.
  • sys_invitation.copy_invitation_link (assessed H). No ai block, as before; a one-line comment names bucket H and why (the accept link is a bearer credential). No behaviour change.
  • ADR-0011, the 2026-10-30 identity addendum. A dated amendment note (ruling of record 6540309323), the H list gains the three names (23), the E list loses two (19), the count paragraph reads 59 actions / 36 ai blocks, the "Not assessed" paragraph now records sys_approval_request's 9 actions as unassessed and human-only, and the two "38 / 37" counts in the MCP paragraphs read 36 / 35.
  • Changesets. New 28368-identity-two-factor-invite-link-human-only.md (@objectstack/platform-objects patch). The unreleased 27900-identity-actions-ai-exposure.md is corrected to the final lists (19 / 17 / 23, 59 assessed, 36 declared) so the release does not ship a sentence saying two-factor enabling is exposed.

Reading of the card's item 1

The card says copy_invitation_link "gets an ai block, tier H". The ruling of record (6540309323) says "→ H (human-only)", the ADR's H row says "no ai block", and the ruled total, 36 ai blocks = C17 + E19, leaves no room for a 37th. So H here means no ai block; the action keeps today's declaration, and the change is its entry in the H list plus the code comment.

Tests

Acceptance notes

Verification

Head cbd23194, merge base fc5d5093 (origin/main).

Local gates: 61 derived, 61 run, 60 exit 0, 1 red by design
  • node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 61 commands from 6 paths (69 changed lines).
  • All 61 run on head cbd23194 after a full pnpm build (116/116, exit 0). 60 exit 0.
  • node scripts/check-empty-changeset.mjs --base origin/main: exit 1, the DELIBERATE CORRECTION of .changeset/27900-identity-actions-ai-exposure.md described under Acceptance notes. It stays red until a person confirms.
  • dispatch-gates --ran with exit codes recorded: 61 derived, 61 run, 0 NOT-MEASURED (a derived zero), exit 0.
  • pnpm lint: exit 0.
  • The first pass, before the full build, gave exit 3 (PREREQUISITE NOT MET) on check:dual-build-cjs-loads, check:i18n, check:lean-entry-closure and check-plugin-teardown-shape.mjs --self-test (shallow clone). All four exit 0 on the final pass.
Not measured locally
  • The CI-only families dispatch-gates names outside its derived total (artifact rosters, wide-population families, the Build Core and Type Check lanes) are left to this PR's check-runs.
  • The dogfood battery is not owed: there is no ! in the title and no (narrowing) arm.

Generated by Claude Code

… human-only identity actions

Both enable_two_factor actions drop their ADR-0011 ai block (E to H), and
copy_invitation_link is assessed H with no ai block. ADR-0011's identity
addendum records the amended lists (H 23 / C 17 / E 19, 36 ai blocks) and
notes sys_approval_request's 9 actions as unassessed and human-only.

Claude-Session: https://claude.ai/code/session_01QUs3BrhuPB4AGHyXk3rvfh
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs.

What this run could not see

Coarse fallback — 2 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 3ba52069197858607f27ffd8a63b8921e06fd6cc → packageMentionDocs.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling labels Oct 31, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#4 · os-zhuang · session_01QUs3BtyH9zgxKzYrJiH18J

Contract-review-claim: session_01QUs3BtyH9zgxKzYrJiH18J · head cbd2319 · 2026-10-31T09:29Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#4 · os-zhuang · session_01QUs3BtyH9zgxKzYrJiH18J

Contract-review-handoff: triage — CONTRACT_REVIEW_TIER unavailable (HTTP 429 rate_limit, request req_011Cga5gPg2uE7VRPve6wDjK, 2026-10-31T09:31Z) · head cbd2319

  • The seat's at-tier reviewer was refused by quota before it rendered a record; ⛔ no lower-tier review stands in (contract-review.md). needs:contract-review is added. The review is owed on this head: the ADR-0011 addendum (scope docs/adr/0011-actions-as-ai-tools.md + the three identity object files and systemObjectActionExposureError it cites), and, since the diff also changes code, the sentence-by-sentence judgment of the check-empty-changeset DELIBERATE CORRECTION to .changeset/27900-identity-actions-ai-exposure.md.
  • The seat's own TIER_DEFAULT review of the remainder follows as ## 席位核对 once the head's check-runs settle. Tier H: the maintainer's approval is owed after a PASS.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#4 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz

Contract-review-claim: session_01L9qibw58ehQ2gRHP2h2Puz · head cbd231941209c68ff5881ba988b77222e7b5976c · 2026-10-31T11:44Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#4 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: cbd231941209c68ff5881ba988b77222e7b5976c
Local-runs: none
Scope: packages/platform-objects/src/identity/sys-user.object.ts and sys-two-factor.object.ts (the enable_two_factor action of each loses its ai block), sys-invitation.object.ts (copy_invitation_link keeps none, now with the bucket comment), docs/adr/0011-actions-as-ai-tools.md (the 2026-10-31 amendment note, the H/C/E name lists, the counts, the "not assessed" paragraph, the MCP paragraphs), .changeset/28368-identity-two-factor-invite-link-human-only.md (new, platform-objects patch) and the DELIBERATE CORRECTION of .changeset/27900-identity-actions-ai-exposure.md (the pending #27900 changeset's counts and name lists)

Inputs: card #28368 (the three items of ruling 6540309323 on #27900, the maintainer's 「其他同意」 of 2026-10-31T06:53Z: copy_invitation_link assessed H, both enable_two_factor moved E to H, sys_approval_request's 9 actions noted unassessed and human-only), PR #28386 (body with the three items, the amended counts and the two changesets, the Metadata-protocol amendment 6541378586 to none, the seat's hand-off 6541730064; 6 files, +40/−28, the diff read whole), the 54 check-runs on this head (read 2026-10-31T11:50Z: 54 runs on this head, 35 success, 17 skipped, 2 failure; the 2 failures are both runs of Check Changeset, the designed check-empty-changeset DELIBERATE CORRECTION refusal of .changeset/27900-identity-actions-ai-exposure.md, red until a person confirms the correction at landing; every other latest run per name is green: Build Core, Check Documentation Links, Dogfood Regression Gate, Flag docs affected by code changes, Governed Surface Queue Guard, Lint & Repo Gates, Lint · CI, release & engine gates, Lint · ESLint, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · repo & tooling gates, Lint · scoped · query-options erasure, Lint · scoped · slot lookup & corpus, Lint · scoped · tooling self-tests, Live E2E UI, PR-body guards (claim · duplicate · Part-of · single-writer path), Plan Test Core shards, Test Core, Test Core (all 8), Test UI, Type Check · consumer gates, Type Check · debt ledger, Type Check · source gates, Type Check · workspace, TypeScript Type Check, filter; skipped: 18.x upgrade harness (opt-in), Auto Label, Build & E2E UI, Build Docs, Build UI Deps, Check PR Size, Dogfood Regression Gate (matrix shard/3), Dogfood Verify CLI, Lint UI, Packed-tarball smoke (opt-in), Schedule gate · skip when a green push run covers the commit, Temporal Conformance (live PG + MySQL), Test UI (matrix shard/16), Type Check UI, UI Published Artifacts), the job log of the red Check Changeset run (124502062205: check-empty-changeset refuses .changeset/27900-identity-actions-ai-exposure.md because it exists on the merge base and was not added by this PR; check-adr-0087-registration and the no-major check in the same job passed), and the tree at this head for the counts: the three ADR name lists hold 23, 17 and 19 unique names (59), and ai: { occurs 36 times across the identity objects (sys-user 7, sys-two-factor 0, sys-invitation 5, the rest unchanged). No file of this PR moved on main since the merge-base; the head is mergeable.

① Derived judgments

② Semver level

③ Boundary flags

④ Design judgment

  • Tried: whether dropping ai on sys_user.enable_two_factor leaves sys_user.disable_two_factor consistent (it was H already, so the pair is now H/H, which reads right: both sides of a sign-in factor are human-only); whether any test pinned the 38 or 21 counts (none in the tree; the ADR says no automatic check by the maintainer's choice); whether the two identical enable_two_factor descriptions were referenced elsewhere (no). Nothing to add.

Verdict reasoning. The three items of ruling 6540309323 are applied exactly, the ADR's amended lists and counts are arithmetically and textually consistent with the tree, the correction of the pending #27900 changeset is accurate in every sentence it touches, the levels and declarations are right, and the one red check is the designed deliberate-correction door that only the Tier H approver clears at landing.

Implemented-by: claude/project-thread-nsguxo
Reviewed-by: session_01L9qibw58ehQ2gRHP2h2Puz

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#4 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: cbd231941209c68ff5881ba988b77222e7b5976c
Local-runs: none
Scope: packages/platform-objects/src/identity/sys-user.object.ts and sys-two-factor.object.ts (the enable_two_factor action of each loses its ai block), sys-invitation.object.ts (copy_invitation_link keeps none, now with the bucket comment), docs/adr/0011-actions-as-ai-tools.md (the 2026-10-31 amendment note, the H/C/E name lists, the counts, the "not assessed" paragraph, the MCP paragraphs), .changeset/28368-identity-two-factor-invite-link-human-only.md (new, platform-objects patch) and the DELIBERATE CORRECTION of .changeset/27900-identity-actions-ai-exposure.md (the pending #27900 changeset's counts and name lists)

Inputs: card #28368 (the three items of ruling 6540309323 on #27900, the maintainer's 「其他同意」 of 2026-10-31T06:53Z: copy_invitation_link assessed H, both enable_two_factor moved E to H, sys_approval_request's 9 actions noted unassessed and human-only), PR #28386 (body with the three items, the amended counts and the two changesets, the Metadata-protocol amendment 6541378586 to none, the seat's hand-off 6541730064; 6 files, +40/−28, the diff read whole), the 54 check-runs on this head (read 2026-10-31T11:51Z: 54 runs on this head, 35 success, 17 skipped, 2 failure; the 2 failures are both runs of Check Changeset, the designed check-empty-changeset DELIBERATE CORRECTION refusal of .changeset/27900-identity-actions-ai-exposure.md, red until a person confirms the correction at landing; every other latest run per name is green: Build Core, Check Documentation Links, Dogfood Regression Gate, Flag docs affected by code changes, Governed Surface Queue Guard, Lint & Repo Gates, Lint · CI, release & engine gates, Lint · ESLint, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · repo & tooling gates, Lint · scoped · query-options erasure, Lint · scoped · slot lookup & corpus, Lint · scoped · tooling self-tests, Live E2E UI, PR-body guards (claim · duplicate · Part-of · single-writer path), Plan Test Core shards, Test Core, Test Core (all 8), Test UI, Type Check · consumer gates, Type Check · debt ledger, Type Check · source gates, Type Check · workspace, TypeScript Type Check, filter; skipped: 18.x upgrade harness (opt-in), Auto Label, Build & E2E UI, Build Docs, Build UI Deps, Check PR Size, Dogfood Regression Gate (matrix shard/3), Dogfood Verify CLI, Lint UI, Packed-tarball smoke (opt-in), Schedule gate · skip when a green push run covers the commit, Temporal Conformance (live PG + MySQL), Test UI (matrix shard/16), Type Check UI, UI Published Artifacts), the job log of the red Check Changeset run (124502062205: check-empty-changeset refuses .changeset/27900-identity-actions-ai-exposure.md because it exists on the merge base and was not added by this PR; check-adr-0087-registration and the no-major check in the same job passed), and the tree at this head for the counts: the three ADR name lists hold 23, 17 and 19 unique names (59), and ai: { occurs 36 times across the identity objects (sys-user 7, sys-two-factor 0, sys-invitation 5, the rest unchanged). No file of this PR moved on main since the merge-base; the head is mergeable.

① Derived judgments

② Semver level

③ Boundary flags

④ Design judgment

  • Tried: whether dropping ai on sys_user.enable_two_factor leaves sys_user.disable_two_factor consistent (it was H already, so the pair is now H/H, which reads right: both sides of a sign-in factor are human-only); whether any test pinned the 38 or 21 counts (none in the tree; the ADR says no automatic check by the maintainer's choice); whether the two identical enable_two_factor descriptions were referenced elsewhere (no). Nothing to add.

Verdict reasoning. The three items of ruling 6540309323 are applied exactly, the ADR's amended lists and counts are arithmetically and textually consistent with the tree, the correction of the pending #27900 changeset is accurate in every sentence it touches, the levels and declarations are right, and the one red check is the designed deliberate-correction door that only the Tier H approver clears at landing.

Implemented-by: claude/project-thread-nsguxo
Reviewed-by: session_01L9qibw58ehQ2gRHP2h2Puz

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#4 · os-zhuang · session_01QUs3BtyH9zgxKzYrJiH18J

ACCEPT · PR #28386 · Head-sha cbd231941209c68ff5881ba988b77222e7b5976c · 2026-10-31T11:52Z · Tier H, approval owed

维护者速读

席位意见:三条裁决逐字落实,ADR 计数与代码树一致,#27900 changeset 的更正逐句核过;唯一的红是有意设计的"更正他人待发 changeset"门,可带红入队。

席位核对

  • Form: 6 files, +40/−28. check-governed-merges.mjs --pr 28386: 1 of 6 paths governed (docs/adr/**), so Tier H: maintainer approval from GOVERNED_APPROVERS before landing. Clause-②: no; Metadata-protocol: none (amendment 6541378586); the contract review accepts both.
  • Premise measured: ruling 6540309323 on [Decision] sys_* kernel objects, assessed as one set: which of the 58 platform identity actions may an agent ever reach (plain declaration / declaration + confirmation / human-only), executing #27681 B parameter 2 in one ruling #27900 (the maintainer's 「其他同意」). Contract review 6542995471 (Served-tier CONTRACT_REVIEW_TIER, same head, VERDICT: PASS) checks the three items against the tree: 36 ai: { blocks, lists of 23/17/19 = 59.
  • Gates (check-runs at the pinned head): 54 runs: 35 success, 17 skipped, 2 failure. Both failures are Check Changeset, the designed check-empty-changeset DELIBERATE CORRECTION refusal of .changeset/27900-identity-actions-ai-exposure.md. Its confirmation is on record: the same-head at-tier PASS (6542995471, ① third bullet) judges each rewritten sentence of that note. Three conditions for entering the queue red, all met: the script states the red is by design (scripts/check-empty-changeset.mjs "Past a designed red"); pr-automation.yml (which runs Check Changeset) has no merge_group trigger; this comment records the gate and its cause.
  • Accepted deviations: card item 1's wording 「gets an ai block, tier H」 is read as "assessed into bucket H", which per the ruling and the ADR's H row means no block. The diff follows the ruling.
  • Out of scope and where it goes: the assessment of sys_approval_request's 9 actions is a later ruling with no card yet. Skills-docs: none.
  • Landing clause: Tier H endgame. needs-user-decision goes on this PR and the approver review is requested now. Once an authorized approver approves, the seat removes the label, flips ready, enables auto-merge, then confirms MERGED and closes out #27900 follow-up: copy_invitation_link and both enable_two_factor identity actions become human-only (H), and ADR-0011 notes sys_approval_request's 9 actions as unassessed #28368.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 31, 2026 23:08
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 31, 2026 23:08
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 31, 2026
Merged via the queue into main with commit 9b4d193 Oct 31, 2026
61 of 66 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-nsguxo branch October 31, 2026 23:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

2 participants